<?php
include_once('../connections/conexao.php');
include_once('../components/TUtils.class.php');
include_once('../components/TSqlSelect.class.php');
include_once('../model/BaseModel.class.php');
include_once('../model/Operador.class.php');
include_once('../model/Permissao.class.php');
include_once('../model/Operacao.class.php');
include_once('../model/Perfil.class.php');
include_once('../model/PerfilComportamental.class.php');
include_once('../model/Status.class.php');
include_once('../model/Vaga.class.php');
include_once('../model/Orgao.class.php');
include_once('../model/Empresa.class.php');
include_once('../model/Lotacao.class.php');
include_once('../model/Salario.class.php');
include_once('../model/LotacaoContrato.class.php');
include_once('../model/Contrato.class.php');
include_once('BaseTeste.php');    
include_once('../workflows/InterfaceFluxo.php');
include_once('../workflows/FluxoContrato.php');

class TesteContrato extends BaseTeste
{
    public $quantidade = 1;
    public $cargoid = 2;
    public $quantidadeVagas;
    
    public function TesteContrato($quantidadeVagas = 10)
    {
        $this->quantidadeVagas = $quantidadeVagas;
    }
    
    public function testarCaso1()
    {
        //1. Inserir
        $contrato = $this->cadastrarContrato();
        
        //2. Inserir Vagas
        $this->inserirVagas($contrato);
        
        //3. Inserir Salários
        $this->inserirSalarios($contrato);
        
        //4. Finalizar Cadastro
        $this->finalizarCadastro($contrato);
        
        //5. Cadastrar Lotações
        $lotacaoid = $this->inserirLotacoes($contrato);
        
        //6. Cadastrar Vagas x Lotações
        $this->lotarVagas($contrato, $lotacaoid);
        
        //7. Encaminhar NC
        $this->encaminharNucleoCentral($contrato);
        
        //8. Confirmar
        $this->confirmarCadastro($contrato);
        
        return $contrato->contratoid;
    }
    
    public function lotarVagas(Contrato $contrato, $lotacaoid)
    {
        $vagas = $contrato->getVagas();
        foreach($vagas as $v) {
            $vaga = new Vaga($v['vagaid']);
            $vaga->lotacaoid = $lotacaoid;
            $vaga->ativa = FALSE;
            $vaga->salvar();
        }
    }
    
    public function cadastrarContrato()
    {
        $this->logarSam();
        
        $contrato = $this->getContratoDefault();
        
        //1. Inserir
        FluxoContrato::inserir($contrato);
        
        return $contrato;
    }
    
    public function finalizarCadastro(Contrato $contrato)
    {
        $this->logarSam();
        
        //$contrato->finalizarCadastro('Cadastro finalizado automaticamente.');
        FluxoContrato::finalizar($contrato, 'Cadastro finalizado automaticamente.');
    }
    
    public function encaminharNucleoCentral(Contrato $contrato)
    {
        $this->logarOrgao();
        
        //$contrato->encaminharNucleoCentral('Encaminhado automaticamente.');
        FluxoContrato::encaminhar($contrato, 'Encaminhado automaticamente.');
    }
    
    public function confirmarCadastro(Contrato $contrato)
    {
        $this->logarNucleoCentral();
        
        //$contrato->confirmarCadastro('Confirmado automaticamente');
        FluxoContrato::confirmar($contrato, 'Confirmado automaticamente.');
    }
    
    public function inserirVagas(Contrato $contrato)
    {
        for ($i = 0; $i < $this->quantidadeVagas; $i++) {
            $vaga = new Vaga();
            $vaga->statusid = Status::Vaga_AContratar;
            $vaga->contratoid = $contrato->contratoid;
            $vaga->cargoid = $this->cargoid;
            $vaga->salvar();
        }
    }
    
    public function inserirLotacoes(Contrato $contrato)
    {
        $criterio = array();
        $criterio['precondicao'] = 'nucleogestorid = ' . $this->nucleogestorid;
        
        $lotacao = new Lotacao();
        $result = $lotacao->listar($criterio);
        $result = pg_fetch_object($result, 0);
        
        $lotacaoContrato = new LotacaoContrato();
        $lotacaoContrato->lotacaoid = $result->lotacaoid;
        $lotacaoContrato->contratoid = $contrato->contratoid;
        $lotacaoContrato->salvar();
        
        return $result->lotacaoid;
    }
    
    public function inserirSalarios(Contrato $contrato)
    {
        $salario = new Salario();
        $salario->contratoid = $contrato->contratoid;
        $salario->cargoid = $this->cargoid;
        $salario->salario = 1000;
        $salario->iniciovigencia = $contrato->datainicio;
        $salario->fimvigencia = $contrato->datafim;
        $salario->a_previdenciasocial = 1;
        $salario->a_fgts = 1;
        $salario->a_salarioeducacao = 1;
        $salario->a_sesi_sesc = 1;
        $salario->a_senai_senac = 1;
        $salario->a_seguroacidentetrabalho = 1;
        $salario->a_sebrae = 1;
        $salario->a_incra = 1;
        $salario->b_avisoprevio = 1;
        $salario->b_fgts = 1;
        $salario->b_faltas = 1;
        $salario->b_auxiliodoenca = 1;
        $salario->c_ferias = 1;
        $salario->c_13salario = 1;
        $salario->c_13ferias = 1;
        $salario->d_incidencia12 = 1;
        $salario->e_iss = 1;
        $salario->e_cofins = 1;
        $salario->e_pis = 1;
        $salario->he = 1;
        $salario->va = 1;
        $salario->vt = 1;
        $salario->farda = 1;
        $salario->taxaadministracao = 1;
        $salario->insalubridade = 1;
        $salario->periculosidade = 1;
        $salario->cestabasica = 1;
        $salario->e_ir = 1;
        $salario->e_csll = 1;
        $salario->adcionalnoturno = 1;
        $salario->outros_lucro = 1;
        $salario->outros_depreciacaoequipamento = 1;
        $salario->outros_municao = 1;
        $salario->outros_segurovida = 1;
        $salario->outros_auxiliofuneral = 1;
        $salario->outros_treinamento = 1;
        $salario->supervisaoronda = 1;
        $salario->salvar();
    }
    
    public function getContratoDefault()
    {
        $contrato = new Contrato();
        $contrato->numerosiof = 1;
        $contrato->numeroorgao = 'T' . date('d/m/Y');
        $contrato->tipocontratoid = 1;
        $contrato->modalidadelicitacaoid = 1;
        $contrato->numerolicitacao = 1;
        $contrato->objeto = 'Objeto';
        $contrato->valorglobal = 1;
        $contrato->valormensal = 1;
        $contrato->diasvigencia = 1;
        $contrato->datainicio = date('Y-m-d');
        $contrato->datafim = '2020/01/01';
        $contrato->empresaid = $this->empresaid;
        $contrato->orgaoid = $this->orgaoid;
        $contrato->ativo = TRUE;

        return $contrato;
    }
    
    public function logarSam()
    {
        global $usuario, $pfcid;
        $usuario = $this->getUsuarioSam();
        $this->carregarUsuario($usuario);
    }
    
    public function getUsuarioSam()
    {
        // brunosam
        return new Operador(32);
    }
}
?>